#include <stdio.h>
#include <limits.h>


//long long maximumTripletValue(int* nums, int numsSize) {
//    long long r=LONG_MIN;
//    long long tmp;
//    for(int i=0; i<numsSize; i++){
//        for(int j=i+1; j<numsSize; j++){
//            for(int k=j+1; k<numsSize; k++){
//                tmp=nums[i]-nums[j];
//                tmp*=nums[k];
//                if( tmp > r ){
//                    r=tmp;
//                }
//            }
//        }
//    }
//    if( r<0 )
//        r=0;
//    return r;
//}

/*
int Max(int a,int b){
    return a>b?a:b;
}
long long maximumTripletValue(int* nums, int numsSize) {
    long long max=0;
    long long postfix[numsSize],prefix[numsSize];
    postfix[numsSize-1]=nums[numsSize-1];
    prefix[0]=nums[0];
    for( int j=numsSize-2; j>0; j-- )
        postfix[j]=Max(nums[j+1],postfix[j+1]);
    for( int j=1; j < numsSize; j++ )
        prefix[j]=Max(nums[j-1],prefix[j-1]);
    for( int j=1; j < numsSize-1; j++ )
        if( (prefix[j]-nums[j])*postfix[j] > max )
            max=(prefix[j]-nums[j])*postfix[j];
    return max;
}*/
long long Max(long long a,long long b){
    return a>b?a:b;
}
long long maximumTripletValue(int* nums, int numsSize) {
    long long max=0;
    long long max_i=nums[0],max_diff=nums[0]-nums[1];
    for( int k=2; k<numsSize; k++ ){
        max_diff=Max(max_diff,max_i-nums[k-1]);
        max_i=Max(max_i,nums[k-1]);
        max=Max(max,1LL*nums[k]*max_diff);
    }
    return max;
}
int main(){
    //int nums[]={12,6,1,2,7};
    int nums[]={1,10,3,4,19};
    long long r=maximumTripletValue(nums,sizeof(nums)/sizeof(int));
    printf("%lld\n",r);
    return 0;
}
